//
//  ZYXHeroViewController.m
//  OCUIBasis
//  英雄展示
//

#import "ZYXHeroViewController.h"

#import "ZYXHero.h"

//@interface ZYXHeroViewController () <UITableViewDataSource>
@interface ZYXHeroViewController () <UITableViewDataSource,UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (nonatomic, strong) NSArray *heros;

@end

@implementation ZYXHeroViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.dataSource = self;
    
    self.tableView.delegate = self;
    
    // 设置行高(每一行的高度一致)
    //    self.tableView.rowHeight = 60;
}

- (NSArray *)heros
{
    if (_heros == nil) {
        // 初始化
        // 1.获得plist的全路径
        NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil];
        
        // 2.加载数组
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        
        // 3.将dictArray里面的所有字典转成模型对象,放到新的数组中
        NSMutableArray *heroArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
            // 3.1.创建模型对象
            ZYXHero *hero = [ZYXHero heroWithDict:dict];
            
            // 3.2.添加模型对象到数组中
            [heroArray addObject:hero];
        }
        
        // 4.赋值
        _heros = heroArray;
    }
    return _heros;
}

#pragma mark - 数据源方法

// 不实现这个方法,默认就是1组

//- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
//{
//    return 1;
//}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.heros.count;
}

//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
//    
//    // 取出模型
//    ZYXHero *hero = self.heros[indexPath.row];
//    
//    // 设置cell的数据
//    cell.textLabel.text = hero.name;
//    cell.detailTextLabel.text = hero.intro;
//    cell.imageView.image = [UIImage imageNamed:hero.icon];
//    
//    return cell;
//}



/*
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
    //UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
    //UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:nil];
    
    // 取出模型
    ZYXHero *hero = self.heros[indexPath.row];
    
    // 设置cell的数据
    cell.textLabel.text = hero.name;
    cell.detailTextLabel.text = hero.intro;
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    
    // 设置cell右边指示器的类型
    
    // 默认是UITableViewCellAccessoryNone(不显示辅助指示视图)
    //    UITableViewCellAccessoryDisclosureIndicator
    //    UITableViewCellAccessoryDetailDisclosureButton
    //    UITableViewCellAccessoryCheckmark
    //    还可以通过cell的accessoryView属性来自定义辅助指示视图（比如往右边放一个开关）

        if (indexPath.row % 2 == 0) {
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
    
    //cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    //cell.accessoryType = UITableViewCellAccessoryCheckmark;
    
    //cell.accessoryView = [[UISwitch alloc] init];
    
    
    // 设置背景(背景view不用设置尺寸, backgroundView的优先级 > backgroundColor)
    UIImageView *bgView = [[UIImageView alloc] init];
    bgView.image = [UIImage imageNamed:@"buttondelete"];
    //cell.backgroundColor = [UIColor redColor];
    cell.backgroundView = bgView;
    
    UIView *selectedbgView = [[UIView alloc] init];
    selectedbgView.backgroundColor = [UIColor greenColor];
    cell.selectedBackgroundView = selectedbgView;
    
    return cell;
}
*/





// 离开屏幕的cell会怎样

/**
 *  每当有一个cell进入视野范围内,就会调用
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // static修饰局部变量:可以保证局部变量只分配一次存储空间(只初始化一次)
    static NSString *ID = @"hero";
    
    // 1.通过一个标识去缓存池中寻找可循环利用的cell
    // dequeue : 出列 (查找)
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 2.如果没有可循环利用的cell
    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
        
        NSLog(@"------缓存池找不到cell--%d", indexPath.row);
    }
    
    // 3.给cell设置新的数据
    // 取出模型
    ZYXHero *hero = self.heros[indexPath.row];
    
    // 设置cell的数据
    cell.textLabel.text = hero.name;
    cell.detailTextLabel.text = hero.intro;
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    return cell;
}



#pragma mark - 代理方法

/**
 *  每一行的高度不一致的时候使用这个方法来设置行高
 */
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0 || indexPath.row == 2) return 100;
    return 60;
}

@end
